散佈圖(Scattper Plot
)可以描述二維以上的資料變數分佈情形,她能神奇的把資料分析結果用最淺白的方式讓人閱讀,透過淡化對照組數據以及重點聚焦,我們能讓每個點有著長幼之分,有時計算相關係數之前(correlation coefficient
),我們經常先畫散佈圖,並暗自希望數據能呈現出迴歸直線(regression line
)。
geom_point(mapping = NULL, data = NULL, stat = "identity", position = "identity",
na.rm = FALSE, ...)
http://docs.ggplot2.org/0.9.3.1/geom_point.html
我們在資料夾MyR新增一支Day20.R
散佈圖會用R內建的鑽石資料集來測試,電視上都有演,決定鑽石最主要決定價格的原因是大小(克拉數),但廣告中還常強調鑽石的顏色(color)、淨度(clarity)、切工(cut),試試看用散佈圖來觀察價格!
在Day20.R中輸入程式碼
#散佈圖(1)
ggplot(diamonds, aes(x = carat, y = price)) + geom_point()
執行結果
大多數的鑽石統計資料集中在0.2-1.2克拉,而且克拉數越大,價格越高,呈現一種陡峭的曲線。
試試看密度圖來看鑽石大小的分佈:
#密度圖(density)
ggplot(data = diamonds) + geom_density(aes(x = carat), fill = "#003366")
趕快和老婆說,越小顆(0.2-0.4)的才是王道!!!是不是!
表達完二個維度了,如果想看第三個維度:鑽石的淨度?
利用點的顏色(color
)表達第3個維度:鑽石的淨度
在Day20.R中輸入程式碼
#散佈圖(2) 鑽石的淨度
ggplot(diamonds, aes(x = carat, y = price)) + geom_point(aes(color = clarity))
執行結果
嗯,越完美無瑕(IF)的鑽石,價格相較其他極輕微(VVS)、輕微暇(VS)、微暇(SI)來得高。
也可以加上不同形狀(shape
)的點來表達淨度(clarity
)差異:
ggplot(diamonds, aes(x = carat, y = price, shape = clarity)) + geom_point(aes(color = clarity))
也許點座標少一點應該會更合適!
當出現更第4個維度(變數)的需求時,可以考慮用矩陣方式表示關係。
在Day20.R中輸入程式碼
#散佈圖矩陣(3) Y軸:切工 X軸:顏色
ggplot(diamonds, aes(x = carat, y = price)) + geom_point(aes(color = color)) + facet_grid(cut ~ color)
執行結果:
試著用Iris鳶尾花資料集來觀察3個亞種花瓣長度及寬度的分佈。
在Day20.R輸入以下程式碼
ggplot(iris, aes(x = Petal.Length, y = Petal.Width)) + geom_point(aes(color = Species)) + stat_density2d(aes(color = Species))
可以蠻清楚分辨出觀測數據是屬於哪一種亞種。
先使用顏色分色鳶尾花亞種,再利用花瓣長度決定點的大小,再加一點半透明。
qplot(Sepal.Length, Petal.Length, data = iris, color = Species, size = Petal.Width, alpha = I(0.7))
執行結果:
http://docs.ggplot2.org/0.9.3.1/geom_point.html
http://docs.ggplot2.org/0.9.3.1/facet_grid.html
R Graphics cookbook
鑽石總是和浪漫在一起
2009.10 honeymoon攝於paris,france